home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc Source Code / Memory / MemHooks.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  2.9 KB  |  103 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        MemHooks.h
  3.  
  4.     Contains:    Memory manager hook classes for debugging
  5.  
  6.     Owned by:    Michael Burbidge
  7.     Owned by:    Jens Alfke
  8.  
  9.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  10.  
  11.     Change History (most recent first):
  12.  
  13.          <6>      8/4/95    DM        Leak checking [1267956]
  14.          <5>      5/4/95    jpa        Added AboutToAllocate.
  15.          <4>    10/24/94    jpa        Constness [1194286].
  16.          <3>     9/14/94    jpa        Eliminated dependencies on rest of OpenDoc.
  17.                                     [1186692]
  18.          <2>      8/8/94    jpa        Added private BasicAboutToFree
  19.          <1>     7/26/94    jpa        first checked in
  20.     To Do:
  21.         
  22. */
  23.  
  24.  
  25. #ifndef _MEMHOOKS_
  26. #define _MEMHOOKS_
  27.  
  28. #if MM_DEBUG
  29.  
  30. #ifndef _MEMORYHE_
  31. #include "MemoryHe.h"
  32. #endif
  33.  
  34.  
  35. //==============================================================================
  36. // CBlockCushionHook - A debugging memory hook which places a prefix and a
  37. //                       suffix on each block. When the block is freed both are
  38. //                       validated to make sure they have not been overwritten.
  39. //
  40. //                        Block format:    PPPPXXXXPPPP...SSSS where XXXX is the
  41. //                                                            block size.
  42. //
  43. //==============================================================================
  44.  
  45. class CBlockCushionHook : public ODMemoryHook
  46. {
  47. public:
  48.     CBlockCushionHook();
  49.     virtual ~CBlockCushionHook();
  50.     
  51.     virtual ODBlockSize GetHeaderSize();
  52.  
  53.     virtual ODBlockSize AboutToAllocate(ODBlockSize size) const;
  54.     virtual void* DidAllocate(void* blk, ODBlockSize);
  55.     virtual const void* AboutToBlockSize(const void* blk);
  56.     virtual void* AboutToFree(void* blk);
  57.     virtual void AboutToRealloc(void*& , ODBlockSize&);
  58.     virtual void* DidRealloc(void* oldBlk, void* blk, ODBlockSize);
  59.  
  60. private:
  61.     unsigned long* BasicAboutToFree(void* blk, MMBoolean zap);
  62.     
  63.     enum { kPrefixCushionLength = 3 * sizeof(unsigned long),
  64.            kSuffixCushionLength = sizeof(unsigned long) };
  65.     enum { kPrefixCushionMagicNumber = 'PPPP',
  66.            kSuffixCushionMagicNumber = 'SSSS' };
  67. };
  68.  
  69.  
  70. //==============================================================================
  71. // CBlockStackCrawlHook - A debugging memory hook that tags every block with the
  72. //                          stack crawl as of the time it was created.
  73. //==============================================================================
  74.  
  75. class StackCrawl;
  76.  
  77. class CBlockStackCrawlHook : public ODMemoryHook
  78. {
  79. public:
  80.     virtual ODBlockSize GetHeaderSize();
  81.  
  82.     virtual ODBlockSize AboutToAllocate(ODBlockSize size) const;
  83.     virtual void* DidAllocate(void* blk, ODBlockSize);
  84.     virtual const void* AboutToBlockSize(const void* blk);
  85.     virtual void* AboutToFree(void* blk);
  86.     virtual void AboutToRealloc(void*& , ODBlockSize&);
  87.     virtual void* DidRealloc(void* oldBlk, void* blk, ODBlockSize);
  88.     virtual long GetType( ) const;
  89.     enum{ kBlockStackCrawlHookType = 1 };
  90.     
  91.             StackCrawl* GetStackCrawl( const void *blk ) const;
  92.             void        SetStackCrawl( const void *blk, StackCrawl* );
  93.     
  94.     static MMBoolean gTrack;
  95.     
  96. private:
  97.             void* BasicAboutToFree(void* blk, MMBoolean zap);
  98. };
  99.  
  100.  
  101. #endif /*MM_DEBUG*/
  102.  
  103. #endif /*_MEMHOOKS_*/